/**
 * 版权所有(C)，上海勾芒信息科技，2016，所有权利保留。
 * 
 * 项目名：	carwx
 * 文件名：	InitWxAccountFilter.java
 * 模块说明：	
 * 修改历史：
 * 2016年11月30日 - Debenson - 创建。
 */
package com.alex.insistence.web.filter;

import java.io.IOException;

import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.filter.OncePerRequestFilter;

import com.alex.wechat.component.config.WxComponentContext;
import com.alex.wechat.mp.config.WxContext;

/**
 * 用户识别微信公众号和支付宝服务窗账户。
 * 
 * @author Debenson
 * @since 0.1
 */
public class InitWapContextFilter extends OncePerRequestFilter {
  static final Logger logger = LoggerFactory.getLogger(InitWapContextFilter.class);

  /** 公众号标识 */
  public static final String PARAM_WX_PUBLIC_ID = "wxpublicid";
  /** 微信用户 标识 */
  public static final String PARAM_WX_OPEN_ID = "wxopenid";
  /** 微信APPID */
  public static final String PARAM_WX_APP_ID = "wxappid";
  /** 微信第三方开放平台账户AppId */
  public static final String PARAM_WX_COMPONENT_APP_ID = "wxcompappid";

  /** 支付宝应用id */
  /* public static final String PARAM_APP_ID = "appid"; */

  @Override
  protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response,
      FilterChain filterChain) throws ServletException, IOException {

    // 设置当前 wx session标识。
    final String openId = request.getParameter(PARAM_WX_OPEN_ID);
    if (StringUtils.isNotBlank(openId)) {
      WxContext.setOpenId(openId);
    }

    // 设置当前公众号
    final String publicId = request.getParameter(PARAM_WX_PUBLIC_ID);
    if (StringUtils.isNotBlank(publicId)) {
      WxContext.setOriginalId(publicId);
    }

    // 设置AppId
    final String appId = request.getParameter(PARAM_WX_APP_ID);
    if (StringUtils.isNotBlank(appId)) {
      WxContext.setAppId(appId);
    }

    // 第三方开放平台AppId
    final String compAppId = request.getParameter(PARAM_WX_COMPONENT_APP_ID);
    if (StringUtils.isNotBlank(compAppId)) {
      WxComponentContext.setAppId(compAppId);
    }

    filterChain.doFilter(request, response);
  }

}
